package componenti.statistica;

public class GeneratoreCasuale {

	public static double[] getSimulation(LeggeDistribuzione lg,
			double[] randomnumbers) {
		double[] res = new double[randomnumbers.length];
		for (int i = 0; i < res.length; i++) {
			res[i] = lg.getRealization(randomnumbers[i]);
		}
		return res;
	}

	public static double[] getArriviDaInterarrivi(double[] interarrivi) {
		double[] res = new double[interarrivi.length];
		res[0] = interarrivi[0];
		for (int i = 1; i < res.length; i++) {
			res[i] = res[i - 1] + interarrivi[i];
		}
		return res;
	}

	public static double[] getIstantiPartenza(double[] istantiArrivi,
			double[] tempiServizio) {
		double[] istantiPartenza = new double[istantiArrivi.length];
		istantiPartenza[0] = istantiArrivi[0] + tempiServizio[0];
		for (int i = 1; i < istantiPartenza.length; i++) {
			istantiPartenza[i] = Math.max(
					(tempiServizio[i] + istantiArrivi[i]),
					(istantiPartenza[i - 1] + tempiServizio[i]));
		}
		return istantiPartenza;
	}

	public static double[] getIstantiPrelevamento(double[] arrivi,
			double[] soggiorno) {
		double[] res = new double[arrivi.length];
		for (int i = 0; i < res.length; i++) {
			res[i] = soggiorno[i] + arrivi[i];
		}
		return res;
	}

	public static double[] getTempiSoggiornoSistema(double[] arrivi,
			double[] tempiPartenza) {
		double[] res = new double[arrivi.length];
		for (int i = 0; i < res.length; i++) {
			res[i] = tempiPartenza[i] - arrivi[i];
		}
		return res;
	}

	public static double[] getTempiSoggiornoBuffer(double[] soggiorno,
			double[] tempoServizio) {
		double[] res = new double[soggiorno.length];
		for (int i = 0; i < res.length; i++) {
			res[i] = Math.max(0, (soggiorno[i] - tempoServizio[i]));
		}
		return res;
	}

	public static double getMedia(double[] vettore) {
		double media = 0;
		for (int i = 0; i < vettore.length; i++) {
			media += vettore[i] / vettore.length;
		}
		return media;
	}
}
